home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / Harvest C 1.3 / Application / Examples / Harvest Bullseye / bullMenus.c next >
Encoding:
C/C++ Source or Header  |  1992-03-05  |  3.1 KB  |  168 lines  |  [TEXT/KAHL]

  1. /*****
  2.  * bullMenus.c
  3.  *
  4.  *    Routines for Bullseye demo menus.
  5.  *
  6.  *****/
  7.  
  8. #include <Windows.h>
  9. #include <Menus.h>
  10. #include <QuickDraw.h>
  11. #include <ToolUtils.h>
  12. #include <Desk.h>
  13. #include <OSUtils.h>
  14. #include <SegLoad.h>
  15.  
  16.  
  17. #include "bullMenus.h"
  18.  
  19. extern    WindowPtr bullseyeWindow;
  20. extern    int    width;
  21.  
  22.  
  23. MenuHandle    appleMenu, fileMenu, editMenu, widthMenu;
  24.  
  25. enum    {
  26.     appleID = 1,
  27.     fileID,
  28.     editID,
  29.     widthID
  30.     };
  31.  
  32. enum    {
  33.     openItem = 1,
  34.     closeItem,
  35.     quitItem = 4
  36.     };
  37.  
  38.  
  39. /****
  40.  * SetUpMenus()
  41.  *
  42.  *    Set up the menus. Normally, we’d use a resource file, but
  43.  *    for this example we’ll supply “hardwired” strings.
  44.  *
  45.  ****/
  46.  
  47. void SetUpMenus(void)
  48.  
  49. {
  50.     InsertMenu(appleMenu = NewMenu(appleID, "\p\024"), 0);
  51.     InsertMenu(fileMenu = NewMenu(fileID, "\pFile"), 0);
  52.     InsertMenu(editMenu = NewMenu(editID, "\pEdit"), 0);
  53.     InsertMenu(widthMenu = NewMenu(widthID, "\pWidth"), 0);
  54.     DrawMenuBar();
  55.     AddResMenu(appleMenu, 'DRVR');
  56.     AppendMenu(fileMenu, "\pOpen/O;Close/W;(-;Quit/Q");
  57.     AppendMenu(editMenu, "\pUndo/Z;(-;Cut/X;Copy/C;Paste/V;Clear");
  58.     AppendMenu(widthMenu, "\p1/1;2/2;3/3;4/4;5/5;6/6;7/7;8/8;9/9;10/0;11;12");
  59. }
  60. /* end SetUpMenus */
  61.  
  62.  
  63. /****
  64.  *  AdjustMenus()
  65.  *
  66.  *    Enable or disable the items in the Edit menu if a DA window
  67.  *    comes up or goes away. Our application doesn't do anything with
  68.  *    the Edit menu.
  69.  *
  70.  ****/
  71.  
  72. int enable (MenuHandle menu, short item, short ok);
  73.  
  74. void AdjustMenus(void)
  75. {
  76.     register WindowPeek wp = (WindowPeek) FrontWindow();
  77.     short kind = wp ? wp->windowKind : 0;
  78.     Boolean DA = kind < 0;
  79.     
  80.     enable(editMenu, 1, DA);
  81.     enable(editMenu, 3, DA);
  82.     enable(editMenu, 4, DA);
  83.     enable(editMenu, 5, DA);
  84.     enable(editMenu, 6, DA);
  85.     
  86.     enable(fileMenu, openItem, !((WindowPeek) bullseyeWindow)->visible);
  87.     enable(fileMenu, closeItem, DA || ((WindowPeek) bullseyeWindow)->visible);
  88.  
  89.     CheckItem(widthMenu, width, true);
  90. }
  91.  
  92.  
  93. static
  94. enable(MenuHandle menu, short item, short ok)
  95. {
  96.     if (ok)
  97.         EnableItem(menu, item);
  98.     else
  99.         DisableItem(menu, item);
  100. }
  101.  
  102.  
  103. /*****
  104.  * HandleMenu(mSelect)
  105.  *
  106.  *    Handle the menu selection. mSelect is what MenuSelect() and
  107.  *    MenuKey() return: the high word is the menu ID, the low word
  108.  *    is the menu item
  109.  *
  110.  *****/
  111.  
  112. void HandleMenu (long mSelect)
  113.  
  114. {
  115.     int            menuID = HiWord(mSelect);
  116.     int            menuItem = LoWord(mSelect);
  117.     Str255        name;
  118.     GrafPtr        savePort;
  119.     WindowPeek    frontWindow;
  120.     
  121.     switch (menuID)
  122.       {
  123.       case    appleID:
  124.         GetPort(&savePort);
  125.         GetItem(appleMenu, menuItem, name);
  126.         OpenDeskAcc(name);
  127.         SetPort(savePort);
  128.         break;
  129.     
  130.       case    fileID:
  131.         switch (menuItem)
  132.           {
  133.           case    openItem:
  134.             ShowWindow(bullseyeWindow);
  135.             SelectWindow(bullseyeWindow);
  136.             break;
  137.                                 
  138.           case    closeItem:
  139.             if ((frontWindow = (WindowPeek) FrontWindow()) == 0L)
  140.               break;
  141.               
  142.             if (frontWindow->windowKind < 0)
  143.               CloseDeskAcc(frontWindow->windowKind);
  144.             else if (frontWindow = (WindowPeek) bullseyeWindow)
  145.               HideWindow(bullseyeWindow);
  146.                         break;
  147.                         
  148.           case    quitItem:
  149.             ExitToShell();
  150.             break;
  151.           }
  152.         break;
  153.                   
  154.       case    editID:
  155.         if (!SystemEdit(menuItem-1))
  156.           SysBeep(5);
  157.         break;
  158.         
  159.       case    widthID:
  160.         CheckItem(widthMenu, width, false);
  161.         width = menuItem;
  162.         InvalRect(&bullseyeWindow->portRect);
  163.         break;
  164.       }
  165. }
  166. /* end HandleMenu */
  167.  
  168.